$(function() {
    // 全选 全不选功能模块
    // 1. 全选思路：里面3个小的复选框按钮（j-checkbox）选中状态（checked）走。
    // 2. 因为checked是复选框的固有属性，此时我们需要利用prop()方法获取和设置该属性。
    // 3. 把全选按钮状态赋值给3个小复选框就可以了。
    $(".checkall").change(function() {
        // ".j-checkbox, .checkall" 利用并集选择器让全选按钮和小选按钮都选上
        $(".j-checkbox, .checkall").prop("checked", $(this).prop("checked"));
        // 如果选中就添加背景颜色
        $(".cart-item").removeClass("check-cart-item")
        if ($(".checkall").prop("checked")) {
            $(".cart-item").addClass("check-cart-item");
        }
    })

    // 小按钮功能模块
    // 如果小复选框被选中的个数等于所有小按钮的个数，就应该把全选按钮选上，否则全选按钮不选
    $(".j-checkbox").change(function() {
        // 点击小按钮就切换选中背景颜色
        $(this).parents(".cart-item").toggleClass("check-cart-item");
        if ($(".j-checkbox:checked").length === $(".j-checkbox").length) {
            $(".checkall").prop("checked", true);
        } else {
            $(".checkall").prop("checked", false);
        }
    })

    // 增减商品数量功能模块
    // 1. 核心思路：首先声明一个变量，当我们点击+号（increment），就让这个值++，然后赋值给文本框。
    // 2. 注意：只能增加本商品的数量，就是当前+号的兄弟文本框（itxt）的值
    // 3. 修改表单的值是val()方法
    // 4. 注意：这个变量初始值应该是这个文本框的值，在这个值的基础上++，要获取表单的值
    // 5. 减号（decrement）思路同理，但是如果文本框的值是1，就不能再减了

    // 商品价格功能模块
    // 1. 核心思路：每次点击+号或者-号，根据文本框的值乘以当前商品的单价 就是 商品的总价格
    // 2. 注意：只能增加本商品的价格，就是当前商品小计模块（p-sum）
    // 3. 修改普通元素的内容用text()方法或者html()方法
    // 4. 注意：当前商品的价格，要把￥符号去掉再相乘 截取字符串substr(起始位置，截取长度)【截取长度不写就是截取到最后】
    // 5. parents("选择器")可以返回祖先级元素
    // 6. 最后计算的结果如果想要保留2位小数通过toFixed(2)方法
    // 7. 用户也可以直接修改表单里面的值，同样要计算总价格，用表单change事件
    // 8. 用最新的表单内的值乘以单价即可，但是还是当前的商品单价

    // 点击+号事件
    $(".increment").click(function() {
        // 增减商品数量功能模块
        var n = $(this).siblings(".itxt").val();
        n++;
        $(this).siblings(".itxt").val(n);
        // 商品价格功能模块
        // parents("选择器")返回祖先级元素
        var p = $(this).parents(".p-num").siblings(".p-price").text();
        p = p.substr(1);
        // 保留2位小数
        var price = (p * n).toFixed(2);
        $(this).parents(".p-num").siblings(".p-sum").html("￥" + price);
        getSum();
    })

    // 点击-号事件
    $(".decrement").click(function() {
        // 增减商品数量功能模块
        var n = $(this).siblings(".itxt").val();
        // 如果文本框的值等于1，就停止
        if (n == 1) {
            return false;
        }
        n--;
        $(this).siblings(".itxt").val(n);
        // 商品价格功能模块
        var p = $(this).parents(".p-num").siblings(".p-price").text();
        p = p.substr(1);
        var price = (p * n).toFixed(2);
        $(this).parents(".p-num").siblings(".p-sum").html("￥" + price);
        getSum();
    })

    // 用户修改文本框的值 表单值变化事件
    $(".itxt").change(function() {
        var n = $(this).val();
        var p = $(this).parents(".p-num").siblings(".p-price").text();
        p = p.substr(1);
        var price = (p * n).toFixed(2);
        $(this).parents(".p-num").siblings(".p-sum").html(price);
        getSum();
    })

    // 计算总件数和总额数模块
    // 1. 核心思路：把所有文本里面的值相加就是总计数量，总额同理
    // 2. 文本框里面的值不相同，如果想要相加需要用到each()方法遍历，声明一个变量，相加即可
    // 3. 点击+号-号，会改变总计和总额，如果用户修改了文本框里面的值同样会改变总计和总额
    // 4. 因此可以封装一个函数求总计和总额，以上2个操作调用这个函数即可
    // 5. 注意：总计是文本框里面的值相加用val()  总额是普通元素的内容用text()
    // 6. 要注意普通元素里面的内容要去掉￥并且转换为数字型才能相加
    // 先调用一次
    getSum();

    function getSum() {
        var count = 0; //计算总件数
        var money = 0; //计算总额数
        // 遍历每一个itxt和p-sum
        $(".itxt").each(function(i, ele) {
            count += parseInt($(ele).val());
        });
        $(".amount-sum em").text(count);
        $(".p-sum").each(function(i, ele) {
            // 去掉￥并且转换为数字型
            money += parseFloat($(ele).text().substr(1));
        })
        money = money.toFixed(2);
        $(".price-sum em").text("￥" + money);
    }

    // 删除商品模块
    // 1. 核心思路：把商品remove()删除元素即可
    // 2. 有三个地方需要删除：1.商品后面的删除按钮 2.删除选中的商品 3.清理购物车
    // 3. 商品后面的删除按钮：一定是删除当前的商品，所以从$(this)出发
    // 商品后面的删除按钮
    $(".p-action").click(function() {
        $(this).parents(".cart-item").remove();
        // 每次删除商品都需要重新计算商品件数和总额
        getSum();
    })

    // 删除选中的商品
    $(".remove-batch").click(function() {
        // :checked 选择被选中的单选框
        $(".j-checkbox:checked").parents(".cart-item").remove();
        getSum();
    })

    // 清理购物车
    $(".clear-all").click(function() {
        $(".cart-item").remove();
        getSum();
    })
})